Returns the value of a DICOM element
Syntax
Visual Basic (Usage) | Copy Code |
---|
Dim instance As DicomDataSet
Dim element As DicomElement
Dim tree As Boolean
Dim tag As Long
Dim defaultValue As T
Dim getValueDelegate As GetValueDelegate
Dim value As T
value = instance.GetValue(Of T)(element, tree, tag, defaultValue, getValueDelegate)
|
Parameters
- element
- an item in the data set.
- tree
- true to evaluate the Data Set as a tree; false to evaluate the Data Set as a list.
- tag
- tag of the item to find.
- defaultValue
- a value of type T that is returned if the actual value cannot be retrieved.
- getValueDelegate
- an optional delegate that converts that extracted data to any type.
Type Parameters
- T
- specifies the type of the value to return
Return Value
a value of type T that is the value of the DICOM element
Example
This example will insert several elements into a DICOM data set, and then retrieve the values using delegates.
Visual Basic | Copy Code |
---|
Public Class PersonName
Private _innerArray As String() = New String(4) {String.Empty, String.Empty, String.Empty, String.Empty, String.Empty}
Default Public Property Item(ByVal index As Integer) As String
Set(ByVal value As String)
If Value Is Nothing OrElse Value.Length < 64 Then
_innerArray(index) = Value
Else
Throw New DicomException("Length of new entry exceeds 64 characters.")
End If
End Set
Get
Return _innerArray(index)
End Get
End Property
Private Const _familyNameIndex As Integer = 0
Private Const _givenNameIndex As Integer = 1
Private Const _middleNameIndex As Integer = 2
Private Const _namePrefixIndex As Integer = 3
Private Const _nameSuffixIndex As Integer = 4
Public Property FamilyName() As String
Set(ByVal value As String)
If Value Is Nothing OrElse Value.Length < 64 Then
_fullName = Nothing
_innerArray(_familyNameIndex) = Value
Else
Throw New DicomException("Length of family name exceeds 64 characters.")
End If
End Set
Get
Return _innerArray(_familyNameIndex)
End Get
End Property
Public Property GivenName() As String
Set(ByVal value As String)
If Value Is Nothing OrElse Value.Length < 64 Then
_fullName = String.Empty
_innerArray(_givenNameIndex) = Value
Else
Throw New DicomException("Length of family name exceeds 64 characters.")
End If
End Set
Get
Return _innerArray(_givenNameIndex)
End Get
End Property
Public Property MiddleName() As String
Set(ByVal value As String)
If Value Is Nothing OrElse Value.Length < 64 Then
_fullName = String.Empty
_innerArray(_middleNameIndex) = Value
Else
Throw New DicomException("Length of family name exceeds 64 characters.")
End If
End Set
Get
Return _innerArray(_middleNameIndex)
End Get
End Property
Public Property NamePrefix() As String
Set(ByVal value As String)
If Value Is Nothing OrElse Value.Length < 64 Then
_fullName = String.Empty
_innerArray(_namePrefixIndex) = Value
Else
Throw New DicomException("Length of family name exceeds 64 characters.")
End If
End Set
Get
Return _innerArray(_namePrefixIndex)
End Get
End Property
Public Property NameSuffix() As String
Set(ByVal value As String)
If Value Is Nothing OrElse Value.Length < 64 Then
_fullName = String.Empty
_innerArray(_nameSuffixIndex) = Value
Else
Throw New DicomException("Length of family name exceeds 64 characters.")
End If
End Set
Get
Return _innerArray(_nameSuffixIndex)
End Get
End Property
Private _fullName As String = String.Empty
Public Property FullName() As String
Set(ByVal value As String)
_fullName = Value
If Not _fullName Is Nothing Then
Dim s As String()
Dim i As Integer
If _fullName.Contains("^") Then
s = _fullName.Split("^"c)
Else
s = _fullName.Split(" "c)
End If
i = 0
Do While i < s.Length
If s(i).Length < 64 Then
If i < _innerArray.Length Then
_innerArray(i) = s(i)
End If
Else
Throw New DicomException("Length of family name exceeds 64 characters.")
End If
i += 1
Loop
Dim k As Integer = i
Do While k < _innerArray.Length
_innerArray(k) = String.Empty
k += 1
Loop
End If
End Set
Get
If _fullName = String.Empty Then
_fullName = _innerArray(0)
Dim isNotNull As Boolean = _fullName <> String.Empty
Dim i As Integer = 1
Do While isNotNull AndAlso i < _innerArray.Length
isNotNull = _innerArray(i) <> String.Empty
If isNotNull Then
_fullName &= "^" & _innerArray(i)
End If
i += 1
Loop
End If
Return _fullName
End Get
End Property
Public Sub New()
End Sub
Public Sub New(ByVal fullNameIn As String)
FullName = fullNameIn
End Sub
Public Sub New(ByVal familyNameIn As String, ByVal givenNameIn As String, ByVal middleNameIn As String, ByVal namePrefixIn As String, ByVal nameSuffixIn As String)
FamilyName = familyNameIn
GivenName = givenNameIn
MiddleName = middleNameIn
NamePrefix = namePrefixIn
NameSuffix = nameSuffixIn
End Sub
Public Overrides Function ToString() As String
Return FullName
End Function
End Class
Private Sub DumpPersonName(ByVal pn As PersonName)
Dim sMsg As String = String.Format("Family Name: {0}" & Constants.vbLf & "Given Name: {1}" & Constants.vbLf & "Middle Name: {2}" & Constants.vbLf & "Name Prefix: {3}" & Constants.vbLf & "Name Suffix: {4}", pn.FamilyName, pn.GivenName, pn.MiddleName, pn.NamePrefix, pn.NameSuffix)
MessageBox.Show(sMsg)
End Sub
Public Function MyGetValueDelegate(ByVal s As String) As Object
Dim pn As PersonName = New PersonName(s)
MyGetValueDelegate = pn
End Function
Private Sub DicomDataSet_GetValueWithDelegateExample()
Dim ds As DicomDataSet = New DicomDataSet()
ds.InsertElementAndSetValue(DicomTag.PatientName, "Smith^John^MiddleName^Mr.^III")
Dim pn As PersonName = Nothing
Dim myDelegate As GetValueDelegate
myDelegate = AddressOf MyGetValueDelegate
pn = ds.GetValue(Of PersonName)(DicomTag.PatientName, Nothing, myDelegate)
DumpPersonName(pn)
pn = ds.GetValue(Of PersonName)(Nothing, True, DicomTag.PatientName, Nothing, myDelegate)
DumpPersonName(pn)
Dim element As DicomElement = ds.FindFirstElement(Nothing, DicomTag.PatientName, True)
pn = ds.GetValue(Of PersonName)(element, Nothing, myDelegate)
DumpPersonName(pn)
End Sub
|
C# | Copy Code |
---|
/// public class PersonName { private string[] _innerArray = new string[5] {string.Empty, string.Empty, string.Empty, string.Empty, string.Empty }; /// Access this person name instance as array. Index range is /// bounded between 0 (family name) and 4 (name suffix). public string this[int index] { set { if (value == null || value.Length < 64) _innerArray[index] = value; else throw new DicomException("Length of new entry exceeds 64 characters."); } get { return _innerArray[index]; } } private const int _familyNameIndex = 0; private const int _givenNameIndex = 1; private const int _middleNameIndex = 2; private const int _namePrefixIndex = 3; private const int _nameSuffixIndex = 4; /// Access person name part family name. public string FamilyName { set { if (value == null || value.Length < 64) { _fullName = null; _innerArray[_familyNameIndex] = value; } else throw new DicomException("Length of family name exceeds 64 characters."); } get { return _innerArray[_familyNameIndex]; } } /// Access person name part given name. public string GivenName { set { if (value == null || value.Length < 64) { _fullName = string.Empty; _innerArray[_givenNameIndex] = value; } else throw new DicomException("Length of family name exceeds 64 characters."); } get { return _innerArray[_givenNameIndex]; } } /// Access person name part middle name. public string MiddleName { set { if (value == null || value.Length < 64) { _fullName = string.Empty; _innerArray[_middleNameIndex] = value; } else throw new DicomException("Length of family name exceeds 64 characters."); } get { return _innerArray[_middleNameIndex]; } } /// Access person name part name prefix. public string NamePrefix { set { if (value == null || value.Length < 64) { _fullName = string.Empty; _innerArray[_namePrefixIndex] = value; } else throw new DicomException("Length of family name exceeds 64 characters."); } get { return _innerArray[_namePrefixIndex]; } } /// Access person name part name suffix. public string NameSuffix { set { if (value == null || value.Length < 64) { _fullName = string.Empty; _innerArray[_nameSuffixIndex] = value; } else throw new DicomException("Length of family name exceeds 64 characters."); } get { return _innerArray[_nameSuffixIndex]; } } private string _fullName = string.Empty; /// Access full person name string representation. According /// to the DICOM standard "^" is used as separator of different /// person name parts. public string FullName { set { _fullName = value; if (_fullName != null) { string[] s; int i; if (_fullName.Contains("^")) s = _fullName.Split('^'); else s = _fullName.Split(' '); for (i = 0; i < s.Length; i++) { if (s[i].Length < 64) { if(i<_innerArray.Length) _innerArray[i] = s[i]; } else throw new DicomException("Length of family name exceeds 64 characters."); } for (int k = i; k < _innerArray.Length; k++) _innerArray[k] = string.Empty; } } get { if (_fullName == string.Empty) { _fullName = _innerArray[0]; bool isNotNull = _fullName != string.Empty; int i = 1; while (isNotNull && i < _innerArray.Length) { isNotNull = _innerArray[i] != string.Empty; if (isNotNull) _fullName += "^" + _innerArray[i]; i++; } } return _fullName; } } /// Creates a new empty person name instance. public PersonName() { } /// Creates a new person name instance from specified full name. /// All person name parts have to be separated by "^" according to /// the DICOM standard. public PersonName(string fullName) { FullName = fullName; } /// Creates a new person name instance from the different person name parts. public PersonName(string familyName, string givenName, string middleName, string namePrefix, string nameSuffix) { FamilyName = familyName; GivenName = givenName; MiddleName = middleName; NamePrefix = namePrefix; NameSuffix = nameSuffix; } /// Return this person name instance's <see cref="FullName" />. public override string ToString() { return FullName; } } void DumpPersonName(PersonName pn) { String sMsg = string.Format("Family Name: {0}\nGiven Name: {1}\nMiddle Name: {2}\nName Prefix: {3}\nName Suffix: {4}", pn.FamilyName, pn.GivenName, pn.MiddleName, pn.NamePrefix, pn.NameSuffix); MessageBox.Show(sMsg); } private void DicomDataSet_GetValueWithDelegateExample() { // Create a DicomDataSet and add a PatientName // Dicom Spec for Value Representation PN (Person Name) // Elements are in this order: // * family name complex // * given name complex // * middle name // * name prefix // * name suffix. DicomDataSet ds = new DicomDataSet(); ds.InsertElementAndSetValue(DicomTag.PatientName, "Smith^John^MiddleName^Mr.^III"); // Get a PersonName value of an element by specifying a tag, and using a delegate // Use this form when the type is not native to the dataset // The data is extracted from the field as a string and passed to the provided method. PersonName pn = null; pn = ds.GetValue<PersonName>( DicomTag.PatientName, null, delegate(string data) { PersonName t = new PersonName(data); return t; } ); DumpPersonName(pn); // Another overload, specifying parent element pn = ds.GetValue<PersonName>( null, true, DicomTag.PatientName, null, delegate(string data) { PersonName t = new PersonName(data); return t; } ); DumpPersonName(pn); // Another overload, this time passing in the DICOM element instead of a tag DicomElement element = ds.FindFirstElement(null, DicomTag.PatientName, true); pn = ds.GetValue<PersonName>( element, null, delegate(string data) { PersonName t = new PersonName(data); return t; } ); DumpPersonName(pn); } |
Remarks
Requirements
Target Platforms: Microsoft .NET Framework 3.0, Windows XP, Windows Server 2003 family, Windows Server 2008 family
See Also